えー、AWSのCodePipelineというものに取り組んでおります。
が、AWS初心者が始めて、超簡単なWebページをGithubにコミットからサーバーにデプロイできるようになるまで、丸2日かかりました。
あまり日本語情報がなかったのとかも関係していますが…。2017年6月27日現在、まだ新しいサービスなんですね。。(´・ω・`)
で、作る方法は公式サイトなどにありますから、途中で引っかかったポイントを書いておきます。
公式サイトは↓
http://transporter-guild.com/wp/2017/04/25/8/
CodePipeline自体は実に簡単に作れます。
Githubからやる場合は、下記のサイトを参考に作ります。
http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-four-stage-pipeline.html
超簡単な構成は、次の通りです。
Sourceを取ってきて、Buildして、Stagingにあげる、というここまでやります。
まず最初に、アーティファクトがないよ、的なメッセージが出ます。
…あーてぃふぁくと??
聞きなれないですね~
ググると遊戯王 Wikiとか出てきます。
あ、いかんいかん、今日も
「Gさんはいつも遊戯王の話をしている」
と怒られたばかりだった…。。(´・ω・`) (ちなみにいつも遊戯王の話はしていない)
とりあえず、成果物、とかいう意味らしいです。
まずは、CodePipelineのアーティファクトを指定するところで、
Source
のアーティファクトが
Build
の入力になり、Buildのアーティファクト(出力)が
Staging
の入力になるようにします。
ちなみに、出力されたアーティファクトはS3の中にどんどんたまっていきます。過去の成果物を取っておいてくれるわけですね~
今度はCloudWatch→ログのCodebuildの中に
code pipeline No artifact files specified
と出るようになります。
これはbuildspec.ymlにartifactsの記述がないからです。
buildspec.ymlを下記のように変更したら治りました。
buildspec.ymlはルートに置いておかないといけません。
version: 0.2 phases: install: commands: - echo Nothing to do in the install phase... pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` post_build: commands: - echo Build completed on `date` artifacts: files: - '**/*'
ついでに、ルートに置いておくファイルでappspec.ymlも必要なのですが、ついでに内容を張っておきます。
version: 0.0 os: linux files: - source: / destination: /var/www/html/ hooks: BeforeInstall: - location: scripts/start_server timeout: 300 runas: root ApplicationStop: - location: scripts/stop_server timeout: 300 runas: root
で、本当はBlue/Greenでやりたかったのですが、どうもわからないことが多いので、より簡単そうなインプレイスのデプロイ方法に変更します。
対象のインスタンスを、タグで指定します。
CodePipelineののStagingにデプロイをするのはAWS CodeDeployが行います。
CodeDeployがなかなか難しい。
まずはCodeDeployを単体でやっておいたほうがいいでしょう。
下記が公式
https://aws.amazon.com/jp/codedeploy/
つまったらこのページ見ると早いです。
Troubleshoot Instance Issues
私が詰まったのは
- AWS CodeDeploy agent をインストールしなくてはいけない。
- 443番ポートを利用するのであけておかないといけない。
- IAMのインスタンスプロファイルをインスタンスに追加しないといけない。
の3点ですね。
AWS CodeDeploy agentをインストールすると、
/var/log/aws/codedeploy-agent/
にログも出るので、わかりやすいです。
上記3点をクリアすると
com.amazonaws.services.simpleworkflow.flow.ActivityTaskFailedException: EC2 instance ******* is not in the same VPC as ELB.
というエラーがイベントのログとして表示されます。
CodeDeployのアプリケーションで登録したロードバランサーのVPCとインスタンスのVPCは同じでないといけません。
上記をクリアして、やっとできました!
まだまだ、俺たちの戦いは始まったばかりだ!
という感じですが。
続きはこちら↓
CodePipeline Githubにコミットしてテスト環境で確認の後デプロイする